<?php

define('SUBJECT_NEW_ACCOUNT',0);
define('SUBJECT_MAIL_CHANGED',1);

class Inscription{
	
	
	public static function inscrire($Nom, $Prenom, $AdresseMail, $Password, $Password_confirm){
		 
		$errors = array();

		if ($Nom == "")
			$errors[] = "Veuillez indiquer votre nom.";
		if ($Prenom == "")
			$errors[] = "Veuillez indiquer votre prénom.";
		
		if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",
		$AdresseMail))
			$errors[] = "L'adresse e-mail fournie n'est pas valide.";

		
		if (strlen($Password) < 5)
			$errors[] = "Veuillez indiquer un mot de passe de plus de 5 caractères.";
		
		if ($Password != $Password_confirm)
			$errors[] = "Les mots de passes saisis ne correspondent pas.";
		 
		if (count($errors) > 0)
			throw new ControlException(implode("<br />",$errors));

			
		$client = new CompteClient($Nom,$Prenom,$AdresseMail,$Password);
		$cleDactivation = Inscription::genererCle();
		$client->setActivationKey($cleDactivation);
		$client->export();
		
		$msg = "L'inscription s'est bien déroulée.";
			
		if (! Inscription::envoiMail($client->getNom(),$client->getPrenom(),$client->getMail(),$cleDactivation))
			$msg .= Inscription::activer($cleDactivation);
		else
			$msg .= " Un message a �t� envoy� à l'adresse que vous nous avez indiqué afin que vous activiez
				votre compte. ";
		return $msg;
	}
	
	private static function genererCle(){
		$cle="";
		for ($i=0;$i<26;$i++){
			$cle .= chr(65+rand(0,25));
		}
		return $cle;
	}
	
	
	public static function activer($cleDactivation){
		$tbh = ConnexionBD::getInstance();
		$stat = $tbh->prepare("UPDATE compte_client SET cle_activation = NULL WHERE cle_activation=:cle ");
		$stat->execute(array(':cle' => $cleDactivation));
		if ($stat->rowCount() >0)
			return " Votre compte est maintenant activ&eacute;. Vous pouvez d&eacute;sormais vous
				enregistrer via l'onglet \"Mon compte\". ";
		else
			return "La cl&eacute; d'activation fournie ne correspond &agrave; aucun compte.";
	}
	
	public static function test(){
		try {
			echo "Creation d'un compte client pour test <br />";
			$client = Inscription::inscrire("Test","Test","mail@test.org","blabla","blabla");
		}
		catch (ControlException $e){
			echo $e->getMessage();
		}
		
	}
	
	private function envoiMail($nom, $prenom, $Addmail,$cle){
		
		$mail = new PHPMailer();
		$mail->From='easykiosk@hemit.fr';
		$mail->AddAddress($Addmail);
		$mail->AddReplyTo('easykiosk@hemit.fr');

	
		$mail->Subject='Bienvenue sur Easykiosk !';
		
		$tpl = new Template("tpl/mails");
		$tpl->set_file("mail","nouveauCompte.tpl");
		$tpl->set_var("PRENOM",$prenom);
		$tpl->set_var("NOM",$nom);
		$tpl->set_var("CLE",$cle);
		$tpl->parse("MAIL","mail");
		
		$mail->Body = $tpl->get("MAIL");
		
		return $mail->Send();
	}
	
	private function envoiChangeMail($Addmail,$cle){
		$mail = new PHPMailer();
		$mail->From='easykiosk@hemit.fr';
		$mail->AddAddress($Addmail);
		$mail->AddReplyTo('easykiosk@hemit.fr');

	
		$mail->Subject='Ré-activation requise';
		
		$tpl = new Template("tpl/mails");
		$tpl->set_file("mail", "modifMail.tpl");
		$tpl->set_var("CLE",$cle);
		$tpl->parse("MAIL","mail");
		$mail->Body = $tpl->get("MAIL");
		
		
		return $mail->Send();
	}
	
	public static function changerMail($newMail, $newMail2, $password){
		$client = Session::getInstance()->getCompteClient();
		
		if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",
		$newMail)){
			$_SESSION['message'] = "L'adresse e-mail fournie n'est pas valide.";
			header('location:index.php?page=moncompte');
		}
		elseif($newMail != $newMail2){
			$_SESSION['message'] = "Les adresses e-mail ne correspondent pas.";
			header('location:index.php?page=moncompte');
		}
		
		// On envoie la modif dans la base
		$cle = Inscription::genererCle(); 
		$tbh = ConnexionBD::getInstance();
		$stat = $tbh->prepare("UPDATE compte_client SET mail_client=:mail_client, cle_activation=:cle
			WHERE id_compte_client=:id_client AND password=:password");
			$array = array( ':mail_client'	=> $newMail,
							':id_client'	=> $client->getIdClient(),
							':password'		=> md5($password),
							':cle' 			=> $cle, 			
			);
		$stat->execute($array);
		
		if ($stat->rowCount() == 0){
			$_SESSION['message'] = 'Mot de passe incorrect, le changement n\'a pas &eacute;t&eacute; effectu&eacute;.';
			header('location:index.php?page=moncompte');
		}
		else{
			// On détruit la session.
			Session::getInstance()->deconnexion();
			$_SESSION['message'] = 'Votre adresse email a &eacute;t&eacute; modifi&eacute;e. Celle-ci requiert une 
				activation. ';
			
			if (! Inscription::envoiChangeMail($newMail,$cle))
				$_SESSION['message'] .= Inscription::activer($cle);

			header('location:index.php');
		}
	}
	
	public static function changerMDP($nouveauMDP, $nouveauMDP2, $ancienMDP){
		
		if ($nouveauMDP != $nouveauMDP2)
			$_SESSION['message'] = "Les mots de passe ne correspondent pas";
			
		if (strlen($nouveauMDP) < 5)
			$_SESSION['message'] = "Veuillez indiquer un mot de passe de plus de 5 caractères.";
			
		if (isset($_SESSION['message']))
			return;
		
		$tbh = ConnexionBD::getInstance();
		$stat = $tbh->prepare("UPDATE compte_client SET password=:newpassword
			WHERE id_compte_client=:id_client AND password=:password");
			$array = array( ':newpassword'	=>md5($nouveauMDP),
							':id_client'	=> Session::getInstance()->getCompteClient()->getIdClient(),
							':password'		=> md5($ancienMDP),
			);
		$result = $stat->execute($array);	
		
		if ($stat->rowCount() != 0)
			$_SESSION['message'] = "Le mot de passe fourni n'est pas valide.";
		else
			$_SESSION['message'] = "Le mot de passe a bien &eacute;t&eacute; modifi&eacute;";
	}
	
	
}
?>